home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / data / etc / sword.lzh / main.c < prev    next >
C/C++ Source or Header  |  1999-06-02  |  6KB  |  281 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <XSP2lib.H>
  5. #include <pcm8afnc.h>
  6. #include <sys/dos.h>
  7. #include <sys/iocs.h>
  8.  
  9.  
  10. #define GLOBAL_DEFINE        /* グローバル変数を確保する */
  11. #include "main.h"
  12. #include "enemy.h"
  13. #include "seq.h"
  14. #include "fxsp2lib.h"
  15.  
  16.  
  17. #define SP_FNAME    "SWORD.SP"
  18. #define OBJ_FNAME    "SWORD.obj"
  19. #define PAL_FNAME    "otoko.PAL"    /* PCGFILE= で指定する値 */
  20.  
  21. #define    PCG_MAX    1024        /* スプライトPCGパターン最大使用数 */
  22. #define    REF_MAX    1024        /* 複合スプライトリファレンスデータ最大使用数 */
  23. #define    FRM_MAX    1024        /* 複合スプライトフレームデータ最大使用数 */
  24. #define RGB(r,g,b) ((g)<<11|(r)<<6|(b)<<1)
  25.  
  26. static char pcg_alt[PCG_MAX + 1];    /* PCG配置管理テーブル */
  27. static char pcg_dat[PCG_MAX * 128];    /* PCGデータファイル読み込みバッファ */
  28. static int old_crtmod;
  29. static int s_option = 0;
  30.  
  31.  
  32.  
  33.  
  34. void usage (void)
  35. {
  36.     printf ("破片パターン表示&作成 main.x ver0.01\n"
  37.         "        programmed by Mitsuky <FreeSoftware>\n"
  38.         "[option]\n"
  39.         "-F : ファイルに書き出す\n"
  40.         "-L : 破片枚数の少ないモード(中ボス用)\n"
  41.         "-S数値 : 乱数シードを指定\n"
  42.     );
  43. }
  44.  
  45.  
  46. /* 起動時のファイル読み込み */
  47. /* 読み込みに失敗した場合はいきなり終了するので注意 */
  48. int load_file (char *fname, void *ptr, size_t size, size_t n)
  49. {
  50.     FILE *fp;
  51.     int i;
  52.  
  53.     if ((fp = fopen (fname, "rb")) == NULL) {
  54.         //fatal_error (ERROR_FILE, fname);
  55.         printf ("%s が読めません\n", fname);
  56.     }
  57.     i = fread (ptr, size, n, fp);
  58.     fclose (fp);
  59.  
  60.     return (i);        /* 返り値は読み込みバイト数 */
  61. }
  62.  
  63.  
  64. void wait_vdisp (void)
  65. {
  66.     int sp;
  67.     sp = _iocs_b_super (0);
  68.     while ((*(volatile unsigned char *) 0xe88001) & 0x10 == 0);
  69.     while ((*(volatile unsigned char *) 0xe88001) & 0x10);
  70.     _iocs_b_super (sp);
  71. }
  72.  
  73.  
  74.  
  75. void init (void)
  76. {
  77.     int i, sp;
  78.     unsigned short *s, *d;
  79.     unsigned short pal_dat[16 * 15];    /* パレットデータファイル読み込みバッファ */
  80.     unsigned short crtcdata[9] =
  81.     {69, 6, 11 + 8, 59 - 8, 567, 5, 40, 552, 785};
  82.     unsigned short textpalet[16] =
  83.     {0, RGB (16, 16, 20), RGB (12, 12, 20), RGB (28, 28, 31), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  84.  
  85.     old_crtmod = _iocs_crtmod (-1);
  86.     _iocs_b_curoff ();
  87.     wait_vdisp ();
  88.     _iocs_crtmod (14);    /* 256*256dot 31kHz 65536色 */
  89.     _iocs_g_clr_on ();
  90.     _iocs_b_curoff ();
  91.     _iocs_ms_curof ();
  92.     _iocs_skey_mod (0, 0, 0);
  93.  
  94.     //sp = _iocs_b_super (0);
  95.     //*(unsigned short *) 0xe82600 &= 0xff80;    /* 画面表示全オフ */
  96.     //_iocs_b_super (sp);
  97.  
  98.  
  99.     _iocs_sp_init ();
  100.     _iocs_sp_on ();        /* スプライト表示をON */
  101.     _iocs_bgctrlst (0, 0, 0);    /* BG0表示OFF */
  102.     _iocs_bgctrlst (1, 1, 0);    /* BG1表示OFF */
  103.  
  104.  
  105.     /* 256x256 正方形モードを作る */
  106.     sp = _iocs_b_super (0);
  107.     *(unsigned short *) 0xe80028 = crtcdata[8];
  108.     d = (unsigned short *) 0xe80002;
  109.     for (i = 1; i < 8; i++)
  110.         *d++ = crtcdata[i];
  111.     *(unsigned short *) 0xe80000 = crtcdata[0];
  112.  
  113.     *(unsigned short *) 0xe8e006 |= 0b10;    /* HRL ビット */
  114.     *(unsigned short *) 0xeb080c = crtcdata[2] + 4;
  115.     *(unsigned short *) 0xeb080a = crtcdata[0];    /* スプライト */
  116.     *(unsigned short *) 0xeb080e = crtcdata[6];
  117.  
  118.     *(unsigned short *) 0xe82500 = 0b01001001001110;    /* 優先順位 TX>SP>GR */
  119.     _iocs_b_super (sp);
  120.  
  121.     load_file (SP_FNAME, pcg_dat, sizeof (char), 128 * PCG_MAX);
  122.     load_file (PAL_FNAME, pal_dat, 2, 16 * 15);
  123.  
  124.     /* パレットに転送 */
  125.     sp = _iocs_b_super (0);
  126.     s = (unsigned short *) 0xe82200;
  127.     for (i = 0; i < 16; i++)
  128.         *s++ = textpalet[i];
  129.     d = pal_dat;
  130.     for (i = 0; i < 15 * 16; i++)
  131.         *s++ = *d++;
  132.     _iocs_b_super (sp);
  133.  
  134.     {
  135.         struct _lineptr lp;
  136.         lp.x1 = 0;
  137.         lp.y1 = 128;
  138.         lp.x2 = 255;
  139.         lp.y2 = 128;
  140.         lp.color = 0xf800;
  141.         lp.linestyle = 0xaaaa;
  142.         _iocs_line (&lp);
  143.         lp.x1 = 128;
  144.         lp.y1 = 0;
  145.         lp.x2 = 128;
  146.         lp.y2 = 255;
  147.         _iocs_line (&lp);
  148.     }
  149.     seq_init0 ();
  150.     EnemyInit0 ();
  151.     fxsp_init (OBJ_FNAME, SP_FNAME, 256);
  152.  
  153.     _dos_breakck (2);    /* BREAK チェックを殺す */
  154.  
  155.     if (f_option_flag)
  156.         fxsp_on ();
  157.     xsp_on ();
  158.     xsp_mode (2);
  159.     xsp_pcgdat_set (pcg_dat, pcg_alt, sizeof (pcg_alt));
  160.     //xsp_objdat_set (ref_dat);
  161.     //pcm8a_vsyncint_on ();
  162.  
  163.     //sp = _iocs_b_super (0);
  164.     //*(unsigned short *) 0xe82600 |= 0x007f;    /* 画面表示オン */
  165.     //_iocs_b_super (sp);
  166. }
  167.  
  168.  
  169. int tini (void)
  170. {
  171.     int sp;
  172.  
  173.     //pcm8a_vsyncint_off ();
  174.     xsp_off ();
  175.     if (f_option_flag) {
  176.         fxsp_off ();
  177.         fcloseall ();
  178.     }
  179.     EnemyTini ();
  180.  
  181.     wait_vdisp ();
  182.  
  183.     sp = _iocs_b_super (0);
  184.     *(unsigned short *) 0xe8e006 &= 0xfffd;    /* HRL ビット */
  185.     _iocs_b_super (sp);
  186.  
  187.     _iocs_skey_mod (-1, 0, 0);
  188.     _iocs_b_curon ();
  189.     _iocs_crtmod (old_crtmod);
  190.  
  191.     return (0);
  192. }
  193.  
  194.  
  195.  
  196. void game (void)
  197. {
  198.     seq_init ();
  199.  
  200.     for (;;) {
  201.         int sprites;
  202.         do {
  203.             seq_move ();
  204.             EnemyMove ();
  205.             sprites = xsp_out ();
  206.             if (f_option_flag)
  207.                 fxsp_out ();
  208.             if (f_option_flag && end_of_data)
  209.                 break;
  210.         } while ((sprites) && (_iocs_ms_getdt ()& 0xffff) == 0);
  211.         if (f_option_flag || (_iocs_ms_getdt ()& 0x00ff))
  212.             break;
  213.         EnemyTini ();
  214.         seq_init ();
  215.     }
  216. }
  217.  
  218.  
  219.  
  220. int main (int argc, char *argv[])
  221. {
  222.     int i;
  223.     int slash_flag = 0;
  224.     int fname_found_flag = 0;    /* ファイル名が1つでもあったか */
  225.  
  226.  f_option_flag = 0;
  227.  end_of_data = 0;
  228.  
  229.     {
  230.         char *temp;
  231.  
  232.         temp = getenv ("SLASH");
  233.         if ((temp != NULL) && (*temp == '/')) {
  234.             slash_flag = 1;
  235.         }
  236.     }
  237.  
  238.     for (i = 1; i < argc; i++) {
  239.         if (('-' == *argv[i]) || ((slash_flag == 0) && ('/' == *argv[i]))) {
  240.             switch (*(argv[i] + 1)) {
  241.  
  242.             case 'f':
  243.             case 'F':
  244.                 f_option_flag = !0;
  245.                 break;
  246.  
  247.             case 'l':
  248.             case 'L':
  249.                 l_option_flag = !0;
  250.                 break;
  251.  
  252.             case 's':
  253.             case 'S':
  254.                 s_option = atoi(argv[i]+2);
  255.                 break;
  256.  
  257.             default:
  258.                 usage ();
  259.                 return (-1);
  260.             }
  261.         } else {
  262.             fname_found_flag = 1;
  263.         }
  264.     }
  265.  
  266. #if    0
  267.     if (fname_found_flag == 0) {
  268.         usage ();
  269.         return (-1);
  270.     }
  271. #endif
  272.     srand(s_option);
  273.  
  274.     init ();
  275.     game ();
  276.  
  277.     tini ();
  278.  
  279.     return (0);
  280. }
  281.